#include <memory>
#include "../third/include/aip-cpp-sdk/speech.h"
#include "logger.hpp"

// 对ASR平台的语音识别接口进行二次封装: 以便于在项目中使用, 我们每次语音识别的时候, 不希望每次都写很长的代码
// 封装思想:
// 1. 在构造函数中, 输入语音识别平台的key相关信息
// 2. 提供一个语音识别的接口 (输入参数就是语音数据), 返回值转换后的文字

// namespace wufan_im{
// class ASRClient{
//     public:
//         using ptr = std::shared_ptr<wufan_im::ASRClient>;
//         ASRClient(const std::string& app_id, const std::string& api_key, const std::string& secret_key)
//         :_client(app_id, api_key, secret_key)
//         {}
//         std::string recognize(const std::string& speech_data, std::string& err) {
//             Json::Value result = _client.recognize(speech_data, "pcm", 16000, aip::null);
//             if (result["err_no"].asInt() != 0) {
//                 LOG_ERROR("语音识别失败: {}", result["err_msg"].asString());
//                 err = result["err_msg"].asString();
//                 return std::string();
//             } 
//             std::cout << result["result"][0].asString() << std::endl;
//             return result["result"][0].asString();
//         }
//     private:
//         aip::Speech _client;
// };

// }



#pragma once
#include "aip-cpp-sdk/speech.h"
#include "logger.hpp"

namespace wufan_im{
class ASRClient {
    public:
        using ptr = std::shared_ptr<ASRClient>;
        ASRClient(const std::string &app_id,
            const std::string &api_key,
            const std::string &secret_key):
            _client(app_id, api_key, secret_key) {}
        std::string recognize(const std::string &speech_data, std::string &err){
            Json::Value result = _client.recognize(speech_data, "pcm", 16000, aip::null);
            if (result["err_no"].asInt() != 0) {
                LOG_ERROR("语音识别失败：{}", result["err_msg"].asString());
                err = result["err_msg"].asString();
                return std::string();
            }
            return result["result"][0].asString();
        }
    private:
        aip::Speech _client;
};
}